package com.compasudea.polla.presentacion;

import java.util.ArrayList;
import java.util.Collection;

import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.compasudea.polla.negocio.PartidoServicios;
import com.compasudea.polla.negocio.dto.PartidoDTO;
import com.compasudea.polla.negocio.dto.UsuarioDTO;
import com.compasudea.polla.util.ConstantesGenerales;

public class PartidosBean {
	
	
	FacesContext context;	
	HttpSession session;
	
	UsuarioDTO user;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo A y los muestra en la tabla.
	 */
	private DataModel partidosADataModel;
	
	/** Partidos del grupo A.*/
	private Collection<PartidoDTO> listaPartidosA;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo B y los muestra en la tabla.
	 */
	private DataModel partidosBDataModel;
	
	/** Partidos del grupo B.*/
	private Collection<PartidoDTO> listaPartidosB;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo C y los muestra en la tabla.
	 */
	private DataModel partidosCDataModel;
	
	/** Partidos del grupo C.*/
	private Collection<PartidoDTO> listaPartidosC;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo D y los muestra en la tabla.
	 */
	private DataModel partidosDDataModel;
	
	/** Partidos del grupo D.*/
	private Collection<PartidoDTO> listaPartidosD;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo E y los muestra en la tabla.
	 */
	private DataModel partidosEDataModel;
	
	/** Partidos del grupo E.*/
	private Collection<PartidoDTO> listaPartidosE;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo F y los muestra en la tabla.
	 */
	private DataModel partidosFDataModel;
	
	/** Partidos del grupo F.*/
	private Collection<PartidoDTO> listaPartidosF;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo G y los muestra en la tabla.
	 */
	private DataModel partidosGDataModel;
	
	/** Partidos del grupo G.*/
	private Collection<PartidoDTO> listaPartidosG;
	
	/**
	 * Contiene la lista de partidos correspondientes al grupo H y los muestra en la tabla.
	 */
	private DataModel partidosHDataModel;
	
	/** Partidos del grupo H.*/
	private Collection<PartidoDTO> listaPartidosH;
	
	
	public PartidosBean() {
		
		context = FacesContext.getCurrentInstance();
		session = ((HttpServletRequest) context.getExternalContext().getRequest()).getSession();
		
		user = (UsuarioDTO) session.getAttribute(ConstantesGenerales.USUARIO_SESSION);
		
	}
	
	/**
	 * Permite obtener el valor de la variable grupoADataModel
	 * @return valor de la variable grupoADataModel.
	 */
	public DataModel getPartidosADataModel() {
		
		if (partidosADataModel == null) {
			partidosADataModel = new ListDataModel();
		}
		
		if (partidosADataModel.getRowCount() != getListaPartidosA().size()) { 
			partidosADataModel.setWrappedData(getListaPartidosA());
		}
		
		return partidosADataModel;
	}

	/**
	 * Asigna el valor a la variable grupoADataModel.
	 * @param grupoADataModel valor a asignar a la variable.
	 */
	public void setPartidosADataModel(DataModel partidosADataModel) {
		this.partidosADataModel = partidosADataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaEquiposA
	 * @return valor de la variable listaEquiposA.
	 */
	public Collection<PartidoDTO> getListaPartidosA() {
		
		if (listaPartidosA == null) {			
			listaPartidosA = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosA = servicio.obtenerPartidosPorGrupo(user, "A");
		}
			
		return listaPartidosA;
	}

	/**
	 * Asigna el valor a la variable listaEquiposA.
	 * @param listaEquiposA valor a asignar a la variable.
	 */
	public void setListaPartidosA(Collection<PartidoDTO> listaEquiposA) {
		this.listaPartidosA = listaEquiposA;
	}	
	
	/**
	 * Permite obtener el valor de la variable partidosBDataModel
	 * @return valor de la variable partidosBDataModel.
	 */
	public DataModel getPartidosBDataModel() {
		
		if (partidosBDataModel == null) {
			partidosBDataModel = new ListDataModel();
		}
		
		if (partidosBDataModel.getRowCount() != getListaPartidosB().size()) { 
			partidosBDataModel.setWrappedData(getListaPartidosB());
		}
		
		return partidosBDataModel;
	}

	/**
	 * Asigna el valor a la variable partidosBDataModel.
	 * @param partidosBDataModel valor a asignar a la variable.
	 */
	public void setPartidosBDataModel(DataModel partidosBDataModel) {
		this.partidosBDataModel = partidosBDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaPartidosB
	 * @return valor de la variable listaPartidosB.
	 */
	public Collection<PartidoDTO> getListaPartidosB() {
		
		if (listaPartidosB == null) {			
			listaPartidosB = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosB = servicio.obtenerPartidosPorGrupo(user, "B");
		}
			
		return listaPartidosB;
	}

	/**
	 * Asigna el valor a la variable listaPartidosB.
	 * @param listaPartidosB valor a asignar a la variable.
	 */
	public void setListaPartidosB(Collection<PartidoDTO> listaPartidosB) {
		this.listaPartidosB = listaPartidosB;
	}
		
	/**
	 * Permite obtener el valor de la variable partidosCDataModel
	 * @return valor de la variable partidosCDataModel.
	 */
	public DataModel getPartidosCDataModel() {
		
		if (partidosCDataModel == null) {
			partidosCDataModel = new ListDataModel();
		}
		
		if (partidosCDataModel.getRowCount() != getListaPartidosC().size()) { 
			partidosCDataModel.setWrappedData(getListaPartidosC());
		}
		
		return partidosCDataModel;
	}

	/**
	 * Asigna el valor a la variable partidosCDataModel.
	 * @param partidosCDataModel valor a asignar a la variable.
	 */
	public void setPartidosCDataModel(DataModel partidosCDataModel) {
		this.partidosCDataModel = partidosCDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaPartidosC
	 * @return valor de la variable listaPartidosC.
	 */
	public Collection<PartidoDTO> getListaPartidosC() {
		
		if (listaPartidosC == null) {			
			listaPartidosC = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosC = servicio.obtenerPartidosPorGrupo(user, "C");
		}
			
		return listaPartidosC;
	}

	/**
	 * Asigna el valor a la variable listaPartidosC.
	 * @param listaPartidosC valor a asignar a la variable.
	 */
	public void setListaPartidosC(Collection<PartidoDTO> listaPartidosC) {
		this.listaPartidosC = listaPartidosC;
	}
	
	/**
	 * Permite obtener el valor de la variable partidosDDataModel
	 * @return valor de la variable partidosDDataModel.
	 */
	public DataModel getPartidosDDataModel() {
		
		if (partidosDDataModel == null) {
			partidosDDataModel = new ListDataModel();
		}
		
		if (partidosDDataModel.getRowCount() != getListaPartidosD().size()) { 
			partidosDDataModel.setWrappedData(getListaPartidosD());
		}
		
		return partidosDDataModel;
	}

	/**
	 * Asigna el valor a la variable partidosDDataModel.
	 * @param partidosDDataModel valor a asignar a la variable.
	 */
	public void setPartidosDDataModel(DataModel partidosDDataModel) {
		this.partidosDDataModel = partidosDDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaPartidosD
	 * @return valor de la variable listaPartidosD.
	 */
	public Collection<PartidoDTO> getListaPartidosD() {
		
		if (listaPartidosD == null) {			
			listaPartidosD = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosD = servicio.obtenerPartidosPorGrupo(user, "D");
		}
			
		return listaPartidosD;
	}

	/**
	 * Asigna el valor a la variable listaPartidosD.
	 * @param listaPartidosD valor a asignar a la variable.
	 */
	public void setListaPartidosD(Collection<PartidoDTO> listaPartidosD) {
		this.listaPartidosD = listaPartidosD;
	}
	
	/**
	 * Permite obtener el valor de la variable grupoEDataModel
	 * @return valor de la variable grupoEDataModel.
	 */
	public DataModel getPartidosEDataModel() {
		
		if (partidosEDataModel == null) {
			partidosEDataModel = new ListDataModel();
		}
		
		if (partidosEDataModel.getRowCount() != getListaPartidosE().size()) { 
			partidosEDataModel.setWrappedData(getListaPartidosE());
		}
		
		return partidosEDataModel;
	}

	/**
	 * Asigna el valor a la variable grupoEDataModel.
	 * @param grupoEDataModel valor a asignar a la variable.
	 */
	public void setPartidosEDataModel(DataModel partidosEDataModel) {
		this.partidosEDataModel = partidosEDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaEquiposE
	 * @return valor de la variable listaEquiposE.
	 */
	public Collection<PartidoDTO> getListaPartidosE() {
		
		if (listaPartidosE == null) {			
			listaPartidosE = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosE = servicio.obtenerPartidosPorGrupo(user, "E");
		}
			
		return listaPartidosE;
	}

	/**
	 * Asigna el valor a la variable listaEquiposE.
	 * @param listaEquiposE valor a asignar a la variable.
	 */
	public void setListaPartidosE(Collection<PartidoDTO> listaEquiposE) {
		this.listaPartidosE = listaEquiposE;
	}	
	
	/**
	 * Permite obtener el valor de la variable grupoFDataModel
	 * @return valor de la variable grupoFDataModel.
	 */
	public DataModel getPartidosFDataModel() {
		
		if (partidosFDataModel == null) {
			partidosFDataModel = new ListDataModel();
		}
		
		if (partidosFDataModel.getRowCount() != getListaPartidosF().size()) { 
			partidosFDataModel.setWrappedData(getListaPartidosF());
		}
		
		return partidosFDataModel;
	}

	/**
	 * Asigna el valor a la variable grupoFDataModel.
	 * @param grupoFDataModel valor a asignar a la variable.
	 */
	public void setPartidosFDataModel(DataModel partidosFDataModel) {
		this.partidosFDataModel = partidosFDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaEquiposF
	 * @return valor de la variable listaEquiposF.
	 */
	public Collection<PartidoDTO> getListaPartidosF() {
		
		if (listaPartidosF == null) {			
			listaPartidosF = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosF = servicio.obtenerPartidosPorGrupo(user, "F");
		}
			
		return listaPartidosF;
	}

	/**
	 * Asigna el valor a la variable listaEquiposF.
	 * @param listaEquiposF valor a asignar a la variable.
	 */
	public void setListaPartidosF(Collection<PartidoDTO> listaEquiposF) {
		this.listaPartidosF = listaEquiposF;
	}	
	
	/**
	 * Permite obtener el valor de la variable grupoGDataModel
	 * @return valor de la variable grupoGDataModel.
	 */
	public DataModel getPartidosGDataModel() {
		
		if (partidosGDataModel == null) {
			partidosGDataModel = new ListDataModel();
		}
		
		if (partidosGDataModel.getRowCount() != getListaPartidosG().size()) { 
			partidosGDataModel.setWrappedData(getListaPartidosG());
		}
		
		return partidosGDataModel;
	}

	/**
	 * Asigna el valor a la variable grupoGDataModel.
	 * @param grupoGDataModel valor a asignar a la variable.
	 */
	public void setPartidosGDataModel(DataModel partidosGDataModel) {
		this.partidosGDataModel = partidosGDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaEquiposG
	 * @return valor de la variable listaEquiposG.
	 */
	public Collection<PartidoDTO> getListaPartidosG() {
		
		if (listaPartidosG == null) {			
			listaPartidosG = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosG = servicio.obtenerPartidosPorGrupo(user, "G");
		}
			
		return listaPartidosG;
	}

	/**
	 * Asigna el valor a la variable listaEquiposG.
	 * @param listaEquiposG valor a asignar a la variable.
	 */
	public void setListaPartidosG(Collection<PartidoDTO> listaEquiposG) {
		this.listaPartidosG = listaEquiposG;
	}	
	
	/**
	 * Permite obtener el valor de la variable grupoHDataModel
	 * @return valor de la variable grupoHDataModel.
	 */
	public DataModel getPartidosHDataModel() {
		
		if (partidosHDataModel == null) {
			partidosHDataModel = new ListDataModel();
		}
		
		if (partidosHDataModel.getRowCount() != getListaPartidosH().size()) { 
			partidosHDataModel.setWrappedData(getListaPartidosH());
		}
		
		return partidosHDataModel;
	}

	/**
	 * Asigna el valor a la variable grupoHDataModel.
	 * @param grupoHDataModel valor a asignar a la variable.
	 */
	public void setPartidosHDataModel(DataModel partidosHDataModel) {
		this.partidosHDataModel = partidosHDataModel;
	}
	
	/**
	 * Permite obtener el valor de la variable listaEquiposH
	 * @return valor de la variable listaEquiposH.
	 */
	public Collection<PartidoDTO> getListaPartidosH() {
		
		if (listaPartidosH == null) {			
			listaPartidosH = new ArrayList<PartidoDTO>();
			
			PartidoServicios servicio = new PartidoServicios();
			
			listaPartidosH = servicio.obtenerPartidosPorGrupo(user, "H");
		}
			
		return listaPartidosH;
	}

	/**
	 * Asigna el valor a la variable listaEquiposH.
	 * @param listaEquiposH valor a asignar a la variable.
	 */
	public void setListaPartidosH(Collection<PartidoDTO> listaEquiposH) {
		this.listaPartidosH = listaEquiposH;
	}	
	
//------------------------------------------------------------------------------------------------------------	
	
	public void guardarResultadoA() {
		
		//Obtiene el partido seleccionado
		PartidoDTO partidoDTO = (PartidoDTO) getPartidosADataModel().getRowData();
		
		
		if (partidoDTO.getResultado() != null && partidoDTO.getResultado().isGuardado()) {
			
		}
		
		
		
		
		//si los marcadores estan vacios
		if (partidoDTO.getGoles1() == null || partidoDTO.getGoles1().trim().length() == 0) {
			
		}
	    
		
		System.out.println("Local: <" + partidoDTO.getEquipo1().getNombre() + ">");

	}
	


}
